;(function($) {

    $.fn.extend({
        "turns": function(options) {
                // 初始参数当没有传入任何参数的时候默认的参数
                var options = $.extend({
                    'time': 5000, //每多少秒走一次
                    'leftPx': null, //每次向右走多少像素
                    'sonObj': null, //那个中间包裹 元素
                    'sonSon': null, //每个子元素就是图片元素
                    'prvBtn': '.left_btn', //左按键
                    'nxtBtn': '.right_btn' //右按键
                }, options);
                return $(options.sonObj, this).each(function() {
                    // 拿左键
                    var $prvBtn = $(this).parent().prev(options.prvBtn);
                    // 拿右键
                    var $nxtBtn = $prvBtn.siblings(options.nxtBtn);
                    //计数作用
                    var i = 0;
                    // 计时器
                    var interval;
                    // 如果没有传入每次走的的px那么默认去拿轮播图的width
                    if (!options.leftPx) {
                        options.leftPx = parseInt($(options.sonSon, this).css('width'));
                    }
                    // 因为$(this)无法进入下面的函数所以声明一个另外声明一个变量
                    var $this = $(this);
                    //拿到包裹轮播图定宽的那个元素
                    var $sonObj = $this.find(options.sonObj);
                    // console.log($sonObj);
                    // 图片元素的个数 从0开始计数
                    var len = $(options.sonSon, $this).length-1;

                    // 当点击左键的时候
                    $prvBtn.click(function() {
                            // 先将计时器清除
                            clearInterval(interval);
                            left();
                            // 当点击完成后再添加上这个计时器
                            // 这样就可以解决计时器在走的时候自动向右走
                            interval = setInterval(r, options.time);
                    });

                    // 当点击右键时
                    $nxtBtn.click(function(){
                    	// 先将计时器清除
                    	clearInterval(interval);
                    	r();
                    	// 当点击完成后再添加上这个计时器
                    	// 这样就可以解决计时器在走的时候自动向右走
                    	interval = setInterval(r, options.time);
                    });

                    // 给元素添加left的函数
                    function plusLeft(self,i,leftPx){
                    	 // 拿到每次向右走多少像素
                    	 var newLeft = i * -leftPx;
                    	 // 向右偏移
                    	if(!self.is(':animated')){
                    	 	self.stop().animate({
                    	     	'left': newLeft
                    	 	},'slow');
                    	 }
                    }
                    // 运行轮播图的函数
                    function r() {
                    	var flag = arguments[0];
                    	// 
                    	if(!flag){
                    		i++;
                    	}
                        	// 如果没有传任何参数表示自动轮播
                    	 	// console.log(i);
                            // 判断是否超出了边界
                            if (i > len) {
                                i = 1;
                                $this.css('left', 0);
                            }
                            // 添加left
                            plusLeft($this,i,options.leftPx);
                   		}
                    // 向左走
                    function left(){
                    		// console.log('当前是第'+i);
                    		i--;
                    		// console.log('回到第'+(i)+'版');
                    		if(i==-1){
                    			// 当i等于-1时
                    			// 将i初始为最后一版
                    			i=len;
                    			var left = i*-options.leftPx;
                    			// 立马将当前的位置设置到最后
                    			$this.css('left',left);
                    			// 再减减一次这样就可以走到倒数第二版
                    			i--;
                    		}

                    		plusLeft($this,i,options.leftPx);
                    		
                        }
                  	// 默认打开页面时自动轮播
                    interval = setInterval(r, options.time);
                    // 当鼠标移动哪某楼层的时候让他停止
                    $(this).hover(function() {
                        clearInterval(interval);
                        // 当鼠标移开哪楼层的时候让他继续
                    }, function() {
                        interval = setInterval(r, options.time);
                    });
                });
            }
    })

})(jQuery)
